Spring Boot WebClient ব্যবহার করে OAuth 2.0 এবং Token Based Authentication ইমপ্লিমেন্ট করা অত্যন্ত গুরুত্বপূর্ণ এবং জনপ্রিয় নিরাপত্তা ব্যবস্থা। এটি ব্যবহারকারীর অনুমোদিত টোকেন (Bearer Token) এর মাধ্যমে API-তে অ্যাক্সেস প্রদান করে। নিচে WebClient এর মাধ্যমে এই ফিচারগুলো ইমপ্লিমেন্ট করার বিস্তারিত দেখানো হয়েছে:
OAuth 2.0 এবং WebClient ব্যবহারের জন্য নিম্নলিখিত ডিপেনডেন্সি যোগ করুন:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-oauth2-client</artifactId>
</dependency>
Spring Security এবং OAuth 2.0 এর মাধ্যমে WebClient কনফিগার করতে application.yml
বা application.properties
ফাইল আপডেট করতে হবে।
spring:
security:
oauth2:
client:
registration:
my-client:
client-id: YOUR_CLIENT_ID
client-secret: YOUR_CLIENT_SECRET
scope: read
authorization-grant-type: client_credentials
token-uri: https://auth-server.com/oauth/token
WebClient কনফিগার করার জন্য একটি @Bean
ডিফাইন করতে হবে, যা স্বয়ংক্রিয়ভাবে OAuth 2.0 Token ব্যবহারে সক্ষম হবে।
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.oauth2.client.OAuth2AuthorizedClientManager;
import org.springframework.security.oauth2.client.OAuth2AuthorizedClientProvider;
import org.springframework.security.oauth2.client.OAuth2AuthorizedClientProviderBuilder;
import org.springframework.security.oauth2.client.registration.ClientRegistrationRepository;
import org.springframework.security.oauth2.client.web.DefaultOAuth2AuthorizedClientManager;
import org.springframework.web.reactive.function.client.WebClient;
@Configuration
public class WebClientConfig {
@Bean
public WebClient webClient(OAuth2AuthorizedClientManager authorizedClientManager) {
return WebClient.builder()
.filter(new ServletOAuth2AuthorizedClientExchangeFilterFunction(authorizedClientManager))
.build();
}
@Bean
public OAuth2AuthorizedClientManager authorizedClientManager(
ClientRegistrationRepository clientRegistrationRepository,
org.springframework.security.oauth2.client.web.OAuth2AuthorizedClientRepository authorizedClientRepository) {
OAuth2AuthorizedClientProvider authorizedClientProvider =
OAuth2AuthorizedClientProviderBuilder.builder()
.clientCredentials()
.build();
DefaultOAuth2AuthorizedClientManager authorizedClientManager =
new DefaultOAuth2AuthorizedClientManager(clientRegistrationRepository, authorizedClientRepository);
authorizedClientManager.setAuthorizedClientProvider(authorizedClientProvider);
return authorizedClientManager;
}
}
WebClient Bean ব্যবহার করে OAuth 2.0 টোকেন সহ API কল করা যেতে পারে।
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.oauth2.client.annotation.RegisteredOAuth2AuthorizedClient;
import org.springframework.security.oauth2.client.web.reactive.function.client.ServletOAuth2AuthorizedClientExchangeFilterFunction;
import org.springframework.stereotype.Service;
import org.springframework.web.reactive.function.client.WebClient;
@Service
public class ApiService {
@Autowired
private WebClient webClient;
public String fetchProtectedData() {
String url = "https://api.example.com/protected-resource";
return webClient
.get()
.uri(url)
.retrieve()
.bodyToMono(String.class)
.block(); // Blocking call for simplicity
}
}
OAuth 2.0 এর বাইরেও সরাসরি Bearer Token দিয়ে API অ্যাক্সেস করা সম্ভব।
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.reactive.function.client.WebClient;
@Configuration
public class WebClientConfig {
@Bean
public WebClient webClient() {
return WebClient.builder()
.defaultHeader("Authorization", "Bearer YOUR_ACCESS_TOKEN")
.build();
}
}
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.reactive.function.client.WebClient;
@Service
public class ApiService {
@Autowired
private WebClient webClient;
public String fetchProtectedData() {
String url = "https://api.example.com/protected-resource";
return webClient
.get()
.uri(url)
.retrieve()
.bodyToMono(String.class)
.block();
}
}
.onStatus()
ব্যবহার করে HTTP স্ট্যাটাস কোড চেক এবং এক্সসেপশন হ্যান্ডল করা যেতে পারে।{
"data": "This is a protected resource response.",
"status": "success"
}
এভাবে, Spring Boot WebClient ব্যবহার করে OAuth 2.0 এবং Token Based Authentication ইমপ্লিমেন্ট করতে পারবেন।
Read more